home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir41 / tsrcom35.zip / TSR.DOC < prev    next >
Text File  |  1993-10-21  |  57KB  |  1,332 lines

  1.                         TSR Utilities Version 3.5
  2.                              Kim Kokkonen
  3.                           TurboPower Software
  4.                                10/18/93
  5.  
  6. Table of Contents
  7. ---------------------------------------------------------------------
  8. 1. Introduction
  9. 2. MARK, FMARK, and RELEASE
  10. 3. MARKNET and RELNET
  11. 4. WATCH and DISABLE
  12. 5. MAPMEM, RAMFREE, and DEVICE
  13. 6. EATMEM
  14. 7. Known Limitations
  15. 8. Version History
  16. 9. Copyright and License Information
  17.  
  18. 1. Introduction
  19. ---------------------------------------------------------------------
  20. The TSR Utilities are a collection of programs useful for managing DOS
  21. memory, particularly for managing memory-resident programs, also known
  22. as TSR's. TSR stands for "Terminate and Stay Resident". The most
  23. popular use of these utilities is for removing TSR's from memory
  24. without rebooting the PC. There are many other uses, however,
  25. especially if you are a software developer.
  26.  
  27. The TSR Utilities have grown to include 11 programs. Here's a quick
  28. overview of each one:
  29.  
  30.   MARK     marks a position in memory above which TSR's can be
  31.            released.
  32.   RELEASE  removes TSR's from memory.
  33.   FMARK    performs the same function as MARK but uses less memory.
  34.   MARKNET  like MARK, but saves a more complete picture of system
  35.            status.
  36.   RELNET   removes TSR's marked with MARKNET.
  37.   WATCH    a TSR itself, it keeps records of other TSR's.
  38.   DISABLE  disables or reactivates TSR's, leaving them in memory.
  39.   RAMFREE  shows how much RAM memory is available.
  40.   MAPMEM   shows what memory resident programs are loaded.
  41.   DEVICE   shows what device drivers are loaded.
  42.   EATMEM   uses up memory for controlled program testing.
  43.  
  44. These programs are described in detail in the following sections. If
  45. you haven't used them before, be sure to read the documentation: All
  46. of the programs are command line driven, and unexpected events may
  47. occur if you just start typing the program names at the DOS command
  48. line. Also be sure to read section 7, "Known Limitations".
  49.  
  50. The most notable feature of TSR Utilities version 3.5 is support for
  51. MS-DOS 6.0 and TSR's loaded in high memory. This version uses a new
  52. algorithm for finding the first block in high memory; this algorithm
  53. works with the most recent versions of EMM386, QEMM, and 386MAX. If
  54. you're using QEMM 7.0, be sure to put DOS=UMB in your CONFIG.SYS, or
  55. you will have lots of nasty problems with the TSR Utilities. If you
  56. are using QEMM 7.0's DOS-UP feature, you must use the /U option of
  57. RELEASE and RELNET, or you will have trouble.
  58.  
  59.  
  60. 2. MARK, FMARK, and RELEASE
  61. ---------------------------------------------------------------------
  62. MARK.COM and RELEASE.EXE are used to remove TSR's from memory, without
  63. requiring a system reboot. In their simplest form, MARK and RELEASE
  64. are used as follows:
  65.  
  66. 1. Run MARK before installing your TSR(s). This marks the current
  67. position in memory and stores information that RELEASE will later need
  68. to restore the system. A common place to call MARK is in your
  69. AUTOEXEC.BAT file.
  70.  
  71. 2. Install whatever TSR's you want, using the normal method for each
  72. TSR.
  73.  
  74. 3. To remove those TSR's from memory, run RELEASE. This will release
  75. all of the memory above (and including) the last MARK, and will
  76. restore the system to the state at the time the MARK was made.
  77.  
  78. There are a number of variations of this simple method. If you want to
  79. release TSR's loaded in high memory, be sure to read the remainder of
  80. this section for instructions on how to do so.
  81.  
  82. MARKs can be stacked in memory, as shown in the following hypothetical
  83. batch file:
  84.  
  85.     MARK
  86.     TSR1
  87.     MARK
  88.     TSR2
  89.     MARK
  90.     TSR3
  91.  
  92. Each call to RELEASE releases memory above and including the last
  93. MARK. In this example, the first call to RELEASE would remove TSR3 and
  94. the last MARK from memory, the second call would remove TSR2 and its
  95. MARK, and so on.
  96.  
  97. MARK and RELEASE may be called using a command line parameter. The
  98. parameter specifies a "mark name" and allows releasing TSR's to a
  99. specific point in memory. Consider the following example:
  100.  
  101.     MARK TSR1
  102.     TSR1
  103.     MARK TSR2
  104.     TSR2
  105.     MARK TSR3
  106.     TSR3
  107.  
  108. This loads the three TSR's just as in the previous example. However,
  109. if RELEASE were called like this,
  110.  
  111.     RELEASE TSR2
  112.  
  113. then both TSR2 and TSR3 would be removed from memory. Note that the
  114. use of such a name does not allow just a single layer of TSR's to be
  115. removed (just TSR2, for example). RELEASE always removes all TSR's
  116. including and beyond the one named.
  117.  
  118. A mark name is any string up to 126 characters long. The name may not
  119. include white space (blanks or tabs). Case (upper or lower) is not
  120. significant when matching mark names.
  121.  
  122. When named marks are used as in this example, calling RELEASE without
  123. specifying a mark name will still remove the last TSR from memory.
  124. Assuming that TSR1, TSR2, and TSR3 were still in memory, typing just
  125. RELEASE would remove TSR3 and the last mark. It is possible to change
  126. this behavior by using "protected marks", which can be released only
  127. by explicitly specifying their names. A protected mark is placed by
  128. giving it a name that starts with an exclamation point, '!'. Consider
  129. the following:
  130.  
  131.     MARK TSR1
  132.     TSR1
  133.     MARK TSR2
  134.     TSR2
  135.     MARK !TSR3
  136.     TSR3
  137.  
  138. Here !TSR3 specifies a protected mark. Typing just RELEASE would
  139. produce an error message "No matching marker found, or protected
  140. marker encountered". The same error would occur after entering the
  141. command RELEASE TSR2. When this error occurs, RELEASE does not remove
  142. any TSR's from memory.
  143.  
  144. The only way to remove TSR3 in this case is by entering
  145.  
  146.     RELEASE !TSR3
  147.  
  148. Each time a MARK is placed in memory, it consumes about 1600 bytes of
  149. RAM space, which is used to store a copy of the system interrupt
  150. vector table and other information with which RELEASE can later
  151. restore the system. Although 1600 bytes isn't very much, we can reduce
  152. this memory usage by storing the information in a disk file rather
  153. than in memory. FMARK.COM is a variation on MARK that does just that.
  154. You can call FMARK at any time that you would call MARK. FMARK uses
  155. only about 150 bytes of memory.
  156.  
  157. All calls to FMARK must include a command line parameter to specify
  158. the name of the file:
  159.  
  160.     FMARK [d:][directory]filename
  161.  
  162. You should generally specify a complete pathname for the mark file.
  163. When you later call RELEASE, you must give it the identical pathname,
  164. regardless of what the current directory happens to be at the time.
  165. For example, if you specified the following file mark
  166.  
  167.     FMARK C:\TEST\TEST.MRK
  168.  
  169. then the following calls to RELEASE would generate an error,
  170.  
  171.     RELEASE TEST.MRK
  172.     RELEASE C:TEST.MRK
  173.  
  174. even if the current directory on drive C: was \TEST. The only way to
  175. call RELEASE is with
  176.  
  177.     RELEASE C:\TEST\TEST.MRK
  178. or
  179.     release c:\test\test.mrk
  180.  
  181. RELEASE can use either type of mark: in-memory or on-disk. Note that
  182. file marks placed by FMARK are never treated as protected marks,
  183. although of course their names must be passed to RELEASE in order to
  184. remove them directly.
  185.  
  186. Consider the following example:
  187.  
  188.     MARK TSR1
  189.     TSR1
  190.     FMARK C:\MARKS\TSR2.MRK
  191.     TSR2
  192.  
  193. Typing just RELEASE in this situation generates the warning message
  194. "No matching marker found, or protected marker encountered", because
  195. the file mark's name has not been provided.
  196.  
  197. TSR2 can be removed from memory by entering
  198.  
  199.     RELEASE C:\MARKS\TSR2.MRK
  200.  
  201. RELEASE deletes the mark file when it has finished.
  202.  
  203. Alternatively, TSR2 and TSR1 could be removed at the same time by
  204. typing
  205.  
  206.     RELEASE TSR1
  207.  
  208. MARK may be called with one optional command line parameter:
  209.  
  210.     /Q         write no screen output. (-Q means the same.)
  211.  
  212. The /Q option is useful when you are using MARK in an integrated
  213. system. Redirecting MARK's output may waste system file handles and
  214. should never be done.
  215.  
  216. RELEASE has several command line options to modify its behavior. The
  217. following table lists the options, which must start with a slash, '/',
  218. or a hyphen, '-'.
  219.  
  220.     /E         do NOT access EMS memory.
  221.     /H         work with upper memory if available.
  222.     /K         release memory, but keep the mark in place.
  223.     /Q         write no screen output.
  224.     /S chars   stuff string (<16 chars) into keyboard buffer on exit.
  225.     /U         work with upper memory, but halt if none found.
  226.     /?         write this help screen.
  227.  
  228. You can also put the string RELEASE=options in the DOS environment.
  229. For example, if you type
  230.  
  231.     SET RELEASE=/U/Q
  232.  
  233. at the DOS command line, RELEASE will use the /U and /Q options as the
  234. defaults thereafter.
  235.  
  236. None of the options is required for normal use of RELEASE.
  237.  
  238. /E is made available for systems running early, buggy EMS (expanded
  239. memory) drivers that don't correctly implement all of the EMS 3.2
  240. system calls. Don't use it unless you have an EMS-related problem
  241. during or after running RELEASE.
  242.  
  243. /H is like /U (see below), but will continue even if no upper memory
  244. blocks are found. /U will cause RELEASE to halt if no upper memory
  245. blocks are found. With /H you can write a batch file that works on all
  246. machines whether or not they have upper memory blocks.
  247.  
  248. /K is useful when you will be releasing and reloading a TSR
  249. repeatedly. With it, you avoid the need to replace the mark each time
  250. the TSR is released. Using /K in combination with a file mark also
  251. prevents RELEASE from deleting the mark file.
  252.  
  253. /Q prevents RELEASE from writing any screen output (unless an error
  254. occurs). This is useful when you are using RELEASE in an integrated
  255. system. Note that redirecting RELEASE's output causes technical
  256. problems and should not be done.
  257.  
  258. /S followed by at least one space and then a short string (15
  259. characters or fewer) tells RELEASE to stuff this string into the
  260. keyboard buffer just before exiting. RELEASE automatically adds a
  261. carriage return to the end of the string. The string may not contain
  262. tabs or spaces.
  263.  
  264. To explain why the /S option is important, we must digress a moment.
  265. Let's assume that you normally keep SideKick loaded, but that you must
  266. unload it in order to have enough memory free to run Lotus 1-2-3. It
  267. would seem reasonable to write a little batch file like this:
  268.  
  269.    RELEASE SK
  270.    LOTUS
  271.    MARK SK
  272.    SK
  273.  
  274. which would remove the previously loaded SideKick from memory, run
  275. Lotus, and then load SideKick again. Unfortunately, this doesn't work!
  276.  
  277. The reason is complicated to explain. It must suffice here to say that
  278. DOS batch files trap memory, and the memory freed by a call to RELEASE
  279. does not truly become available until the current batch file ends.
  280.  
  281. Now perhaps the need for the /S option becomes clear. We can split the
  282. previous batch file into two:
  283.  
  284.   batch1:
  285.     RELEASE SK /S BATCH2
  286.  
  287.   batch2:
  288.     LOTUS
  289.     MARK SK
  290.     SK
  291.  
  292. The first batch file releases the memory and stuffs the characters
  293. 'BATCH2<Enter>' into the keyboard buffer. When the batch file ends,
  294. the released memory becomes available. DOS automatically reads the
  295. keystrokes waiting in the buffer and starts up the second batch file,
  296. which runs Lotus and later reloads SideKick.
  297.  
  298. To keep things simple, the /S option pokes the specified keystrokes
  299. directly into the system keyboard buffer. As a result, the number of
  300. keystrokes is limited to 15 (not counting the <Enter> key, which
  301. RELEASE adds automatically). This always allows enough keys to start
  302. another batch file, however, and the new batch file can take over from
  303. there.
  304.  
  305. RELEASE detects when it is releasing memory within a batch file. It
  306. writes a warning message to that effect, but continues processing
  307. anyway under the assumption that the batch file is about to end. You
  308. can ignore the warning if you've already taken account of DOS's memory
  309. management behavior within batch files.
  310.  
  311. The /U option is required when you are releasing a TSR that has been
  312. loaded into high memory (memory between 640K and 1 megabyte). It may
  313. be also appropriate even for a TSR loaded into low memory, if other
  314. TSR's have been loaded into high memory.
  315.  
  316. The high memory features of TSR Utilities version 3.x are available
  317. only if you are running a compatible memory manager. Any memory
  318. manager that supports the UMB (upper memory block) features of XMS
  319. (extended memory specification) memory managers should work with the
  320. high memory features of the TSR Utilities. This includes 386MAX
  321. (Qualitas), QEMM386 (Quarterdeck), HIMEM/EMM386 (Microsoft), and
  322. HIDOS/EMM386 (Digital Research).
  323.  
  324. If you're using just the high memory features of MS-DOS itself,
  325. without additional memory managers, note that you must have at least
  326. the following in your CONFIG.SYS in order for the TSR Utilities to
  327. access high memory:
  328.  
  329.   DEVICE=HIMEM.SYS
  330.   DEVICE=EMM386.SYS RAM
  331.   DOS=UMB
  332.  
  333. See the discussion of the EMM386.SYS driver in your MS-DOS
  334. documentation for more information about options compatible with
  335. creating upper memory blocks.
  336.  
  337. If you are using QEMM 6.0 or 7.0, you *must* also include the line
  338. DOS=UMB in your CONFIG.SYS file. This enables a DOS call needed by the
  339. TSR Utilities and does not seem to hurt the performance of QEMM. If
  340. you are using QEMM 7.0's DOS-UP feature, you *must* use the /U option
  341. of RELEASE and RELNET, or you will have trouble.
  342.  
  343. You should *not* put DOS=UMB in CONFIG.SYS if you are using 386MAX 6.0
  344. or 7.0.
  345.  
  346. To test whether your memory manager is compatible with the TSR
  347. Utilities high memory features, try entering MAPMEM /U at the DOS
  348. command line. If you get an accurate-looking high memory report from
  349. MAPMEM, then you can assume that the memory manager is compatible with
  350. the TSR Utilities. Because of the lack of complete standards for
  351. managing high memory, the names and attributes of programs in high
  352. memory may sometimes appear garbled: unfortunately there is little we
  353. can do about this without building features specific to particular
  354. memory managers into the TSR Utilities.
  355.  
  356. Note that even if you don't get a high memory report from MAPMEM, you
  357. can still use the TSR Utilities without upper memory support.
  358.  
  359. The /U option causes a fundamental change in the behavior of RELEASE.
  360. It is important that you understand what it does in order to use it
  361. properly.
  362.  
  363. When the /U option is *not* specified, RELEASE removes programs in
  364. address order. That is, with a few exceptions, it deallocates any
  365. memory blocks that have a memory address greater than or equal to that
  366. of the mark.
  367.  
  368. This behavior is almost never appropriate when TSR's are loaded high.
  369. When high memory is involved, the *chronological* order in which TSR's
  370. were loaded rarely matches the *address* order in which they were
  371. loaded. Before TSR's could be loaded high, these two orderings were
  372. usually the same, so no distinction was necessary. Now, however, it's
  373. common to load one program high, then one low, then another high; or
  374. to load one program into "region 2" of high memory, then another into
  375. "region 1", and so on.
  376.  
  377. Therefore, when the /U option is activated, RELEASE frees memory in
  378. *chronological* order. That is, it frees all memory blocks allocated
  379. since the time the mark was placed, regardless of the address position
  380. of the memory. Additional information is now stored in the mark file
  381. or memory image to allow this to occur. Only when /U is specified does
  382. RELEASE access high memory.
  383.  
  384. If you have *any* TSR's loaded into high memory, you should use the /U
  385. option, even if the particular TSR you're unloading is located in low
  386. memory. Depending on the chronological order in which you loaded the
  387. TSR's, an unload from low memory may also trigger unloads from high
  388. memory, or vice versa.
  389.  
  390. When you intend to use the /U option, you must provide a unique mark
  391. name for each mark (because there is no unambiguous way to find the
  392. correct unnamed mark). Note that a mark name is inherent in the
  393. filename specified to FMARK.
  394.  
  395. Because of the chronological nature of RELEASE /U, you can load the
  396. MARK high and the associated TSR low (or vice versa) if desired.
  397.  
  398. The high memory features of the TSR Utilities count on the "link UMB"
  399. feature of DOS 5-6 being turned off. When link UMB is on, normal RAM
  400. and high memory are linked together into a single chain of memory
  401. control blocks, and in this case the techniques used by the utilities
  402. would process the blocks in high memory twice. Fortunately, we don't
  403. know of any cases where "link UMB" is activated by DOS application
  404. programs except temporarily during times when the TSR Utilities could
  405. not possibly be used.
  406.  
  407.  
  408. 3. MARKNET and RELNET
  409. ---------------------------------------------------------------------
  410. Use of these utilities is very similar to that described in the
  411. preceding section. MARKNET is analogous to FMARK, and RELNET is like
  412. RELEASE. MARKNET stores more information about the system's status
  413. than does MARK, so it is appropriate for managing TSR's, such as
  414. network shells, that hook into the system at a low level.
  415.  
  416. Because MARKNET stores so much information about the system, it always
  417. writes the data to a disk file in order to reduce its own memory
  418. usage.
  419.  
  420. Command line syntax for MARKNET and RELNET is:
  421.  
  422.   MARKNET [d:][directory]filename [/Q]
  423.   RELNET  [d:][directory]filename [options]
  424.  
  425. The main command line parameter to each program specifies the name of
  426. the file where the mark information will be stored. We refer to this
  427. file as the net mark file. A complete pathname should be specified for
  428. the net mark file. RELNET's pathname must exactly match that passed to
  429. MARKNET, with the exception of case.
  430.  
  431. Note that MARKNET and RELNET may be used in almost any situation where
  432. FMARK and RELEASE are used. MARKNET saves all of the same system
  433. information as does FMARK, but it goes further to store information
  434. such as the device driver chain, DOS internal variable areas, DOS
  435. system file tables, DOS environment, communications port status, XMS
  436. memory state, and other information. Nevertheless, MARKNET and RELNET
  437. were written primarily because of the large demand to release the
  438. NetWare shell. We'll refer to NetWare specifically in the following
  439. and provide an example of how to load and release it.
  440.  
  441. The only new restriction for using MARKNET is that the system must be
  442. running DOS version 3.0 or later. MARKNET depends on the format of
  443. certain internal DOS data structures that were quite different in DOS
  444. version 2.
  445.  
  446. Like FMARK, MARKNET leaves a small (144-192) byte mark in memory, and
  447. writes a disk file to store the system status. MARKNET's file varies
  448. in size, but is typically 3-5K bytes. The size depends on the number
  449. of device drivers, the value of the 'FILES=' directive in CONFIG.SYS,
  450. the number of EMS and XMS memory blocks allocated, and other DOS
  451. implementation details.
  452.  
  453. Do not attempt to redirect the output of MARKNET. Doing so will waste
  454. at least one file handle that cannot be recovered later by RELNET.
  455. MARKNET's /Q option is provided to prevent it from writing any screen
  456. output.
  457.  
  458. Marks placed with MARK, FMARK, and MARKNET may be mixed in the same
  459. system. RELEASE treats all marks placed with MARKNET as protected;
  460. such marks may be released only by calling RELNET explicitly. Consider
  461. the following example:
  462.  
  463.   MARK TSR1
  464.   TSR1
  465.   FMARK C:\MARKS\TSR2.MRK
  466.   TSR2
  467.   MARKNET C:\MARKS\TSR3.MRK
  468.   TSR3
  469.  
  470. Entering RELEASE by itself would generate a warning and do nothing
  471. else. Entering RELEASE C:\MARKS\TSR2.MRK would generate the same
  472. warning. The only way to get all three of these TSR's out of memory
  473. would be to enter the following commands in sequence:
  474.  
  475.   RELNET C:\MARKS\TSR3.MRK
  476.   RELEASE C:\MARKS\TSR2.MRK
  477.   RELEASE TSR
  478.  
  479. RELNET has options to control how much of the system state it
  480. restores. Several of the options match those of RELEASE; new ones are
  481. also provided to control the additional information that MARKNET
  482. stores. RELNET accepts the following options:
  483.  
  484.   /C        do NOT restore the communications ports.
  485.   /E        do NOT access EMS memory.
  486.   /H        work with upper memory if available.
  487.   /I        do NOT shut down IPX events and sockets.
  488.   /K        release memory, but keep the mark in place.
  489.   /L        do NOT restore CD-ROM drive letters.
  490.   /P        do NOT restore DOS environment.
  491.   /Q        write no screen output.
  492.   /R        revector 8259 interrupt controller to powerup state.
  493.   /S chars  stuff string (<16 chars) into keyboard buffer on exit.
  494.   /T        do NOT reset the system timer chip.
  495.   /U        work with upper memory, but halt if none found.
  496.   /V        verbose: show each step of the restore.
  497.   /X        do NOT access XMS memory.
  498.   /?        write help screen.
  499.  
  500. You can also put the string RELNET=options in the DOS environment. For
  501. example, if you type
  502.  
  503.     SET RELNET=/U/Q
  504.  
  505. at the DOS command line, RELNET will use the /U and /Q options as the
  506. defaults thereafter.
  507.  
  508. None of these options, except perhaps /U, is required in order to
  509. release the NetWare workstation shell.
  510.  
  511. /C prevents RELNET from restoring the communications state of the
  512. system (as encoded in the 8250 async chip and the 8259 programmable
  513. interrupt controller). Because both of these chips provide readable
  514. registers, MARKNET is able to store an accurate picture of the
  515. communications state when the mark is stored; RELNET can restore the
  516. state to exactly what it was. Therefore, the /C option should be
  517. needed rarely, perhaps only on newer PS/2 models that don't use the
  518. 8250 as a communications controller. Note that MARKNET stores
  519. information only about COM1 and COM2.
  520.  
  521. /E is made available for systems running early, buggy EMS drivers that
  522. don't correctly implement all of the EMS 3.2 system calls. Don't use
  523. it unless you have an EMS-related problem during or after running
  524. RELNET.
  525.  
  526. /H is like /U (see below), but will continue even if no upper memory
  527. blocks are found. /U will cause RELNET to halt if no upper memory
  528. blocks are found. With /H you can write a batch file that works on all
  529. machines whether or not they have upper memory blocks.
  530.  
  531. /I prevents RELNET from detecting and deactivating IPX events and
  532. sockets owned by the memory blocks being released. (IPX is the low
  533. level communications protocol used on Novell networks.) Don't use it
  534. unless it solves a problem for you.
  535.  
  536. /K is useful when you will be releasing and reloading a TSR
  537. repeatedly. With it, you avoid the need to replace the mark each time
  538. the TSR is released. Using /K prevents RELNET from deleting the net
  539. mark file.
  540.  
  541. /L prevents RELNET from releasing drive letters allocated by
  542. Microsoft's MSCDEX CD-ROM TSR. RELNET's code here should do nothing
  543. unless it detects that MSCDEX is being released by RELNET. Use /L only
  544. if it solves an unexpected problem for you.
  545.  
  546. /P keeps RELNET from restoring the DOS environment, which it normally
  547. does because NetWare modifies the DOS PATH. In some cases, other
  548. changes to the environment should not be undone; use the /P switch
  549. only when such changes must be preserved.
  550.  
  551. /Q prevents RELNET from writing any screen output (unless an error
  552. occurs). This is useful when you are using RELNET in an integrated
  553. system. Redirecting RELNET's output causes technical problems and
  554. should never be done.
  555.  
  556. /R may be useful for unloading task-switching utilities that
  557. "revector" the hardware interrupt controller. Use it only if it solves
  558. a problem.
  559.  
  560. /S followed by at least one space and then a short string (15
  561. characters or fewer) tells RELNET to stuff this string into the
  562. keyboard buffer just before exiting. RELNET automatically adds a
  563. carriage return to the end of the string. The string may not contain
  564. tabs or spaces. See the discussion of /S in the preceding section for
  565. more details.
  566.  
  567. /T keeps RELNET from resetting the system timer chip to its default
  568. rate, which it does by default.
  569.  
  570. /U causes RELNET to access high memory. See the discussion of high
  571. memory in the previous section for more information.
  572.  
  573. /V activates additional status reporting during the release and may
  574. provide useful information in cases when RELNET isn't working.
  575.  
  576. /X prevents RELNET from restoring the state of XMS (extended) memory.
  577. This option is provided in case of an unforeseen conflict with an XMS
  578. memory driver. Note that this option also controls whether the HMA
  579. (high memory area) is restored.
  580.  
  581. The following is a simple version of a NetWare LOGIN.BAT file with
  582. support for releasing the shell:
  583.  
  584.   rem place the mark
  585.       marknet C:\NET\NETWARE.MRK
  586.  
  587.   rem load the NetWare shell TSR's
  588.       ipx
  589.       net3
  590.   rem optional portions of the shell
  591.   rem netbios
  592.   rem int2f
  593.  
  594.   rem switch to login drive and log in
  595.       F:
  596.       login USERNAME
  597.  
  598. At a minimum, the items in uppercase will need to be customized for a
  599. given user and workstation.
  600.  
  601. NetWare could then be released with the following batch file:
  602.  
  603.   rem let the server know we're leaving
  604.       z:\public\logout
  605.   rem restore the workstation
  606.       relnet C:\NET\NETWARE.MRK
  607.  
  608. As of TSR Utilities version 3.0, you may release the NETBIOS emulator
  609. independently from NETx and IPX. You should always release NETx and
  610. IPX together.
  611.  
  612.  
  613. 4. WATCH and DISABLE
  614. ---------------------------------------------------------------------
  615. WATCH.COM is a memory-resident program that keeps track of other
  616. memory resident programs. As a TSR goes resident, WATCH updates a data
  617. area in memory that contains information about what interrupt vectors
  618. were taken over. This information can later be used by MAPMEM and
  619. DISABLE to show more details about interrupts than normally available.
  620.  
  621. Installation of WATCH.COM is optional. All of the TSR Utilities except
  622. DISABLE can be used whether or not WATCH is installed.
  623.  
  624. If you want to use it, WATCH.COM should be installed as one of the
  625. first TSR's in your AUTOEXEC.BAT file. WATCH may be loaded into low
  626. memory or, if a compatible memory manager is in use, into high memory.
  627.  
  628. WATCH uses about 3100 bytes of memory when it is installed. Most of
  629. this memory holds various information about the TSR's installed in the
  630. system -- it includes a copy of the interrupt vector table and a data
  631. area containing a list of the interrupt vectors taken over by each
  632. TSR. This information is used by DISABLE to deactivate and reactivate
  633. TSR's without removing them from memory. It is also used by MAPMEM to
  634. report more accurately on the interrupt vectors trapped by each TSR.
  635.  
  636. With DISABLE.EXE, you can disable and reenable specified memory
  637. resident programs without removing them from memory. Its function is
  638. analogous to that performed by REFEREE from Persoft, although DISABLE
  639. has neither a fancy user interface nor an option to work from within
  640. other programs. DISABLE can allow conflicting TSR's to coexist, and it
  641. can let you run applications whose keystrokes conflict with those of
  642. TSR's already loaded. DISABLE also provides a small bonus in that it
  643. can be used to detect the presence of a particular TSR in memory, thus
  644. allowing the design of semi-intelligent batch files. (Note that, as of
  645. version 3.0, MAPMEM also can detect the presence of a particular TSR,
  646. without requiring that WATCH be loaded.)
  647.  
  648. In order to use DISABLE, you must install WATCH.COM prior to loading
  649. any TSR that you wish to disable. WATCH keeps the detailed information
  650. about each memory resident program that DISABLE uses to later control
  651. them.
  652.  
  653. Like the other TSR Utilities, DISABLE is operated from the command
  654. line. You specify a single TSR by its name (if you are running DOS 3.0
  655. or later) or by its address as determined from a MAPMEM report
  656. (described below). If you specify an address, immediately precede the
  657. address with a dollar sign "$" and specify the address in hexadecimal.
  658.  
  659. The name specified for a TSR is the one reported by MAPMEM in the
  660. "Name" column. If this column reports "n/a", then you must instead
  661. specify the address from the "PSP" column.
  662.  
  663. DISABLE accepts the following command line syntax:
  664.  
  665.   DISABLE TSRname|$PSPaddress [options]
  666.  
  667. Options may be preceded by either / or -. Valid options
  668. are as follows:
  669.  
  670.      /A     reactivate the specified TSR.
  671.      /C     check for the presence of the specified TSR.
  672.      /H     work with upper memory if available.
  673.      /L     do not look in low memory for the TSR.
  674.      /O     disable the TSR even if dangerous (Override).
  675.      /Q     write no screen output.
  676.      /U     work with upper memory, but halt if none found.
  677.      /?     write a help screen.
  678.  
  679. You can also put the string DISABLE=options in the DOS environment.
  680. For example, if you type
  681.  
  682.     SET DISABLE=/U/Q
  683.  
  684. at the DOS command line, DISABLE will use the /U and /Q options as the
  685. defaults thereafter.
  686.  
  687. If no option is specified, DISABLE will disable the named TSR. When /A
  688. is specified, a previously disabled TSR is reenabled.
  689.  
  690. /C causes DISABLE simply to check for the presence of a TSR. It writes
  691. an appropriate screen message and returns a DOS ERRORLEVEL to indicate
  692. whether the TSR is currently in memory: 0 if the TSR is present, 2 if
  693. it is not present, 254 or higher if an error occurs.
  694.  
  695. /H is like /U (see below), but will continue even if no upper memory
  696. blocks are found. /U will cause DISABLE to halt if no upper memory
  697. blocks are found. With /H you can write a batch file that works on all
  698. machines whether or not they have upper memory blocks.
  699.  
  700. /L prevents DISABLE from searching low memory (memory below 640K) for
  701. the specified TSR. Use this option if you only want to act on TSRs
  702. found in high memory. Specifying /L also automatically sets the same
  703. flag controlled by /H.
  704.  
  705. /O allows DISABLE to proceed with disabling a TSR even if internal
  706. checks indicate that it isn't safe to do so. Use this option only
  707. after careful experimentation indicates that it is safe to do so.
  708.  
  709. /Q prevents DISABLE from writing any screen output. DOS ERRORLEVEL is
  710. still set to allow batch files to determine the results.
  711.  
  712. /U allows DISABLE to access upper memory blocks. You cannot disable a
  713. TSR loaded high without using this option or /H. As with RELEASE and
  714. RELNET, you must have a compatible memory manager in order to use the
  715. DISABLE /U option. See section 2 for more information.
  716.  
  717. DISABLE sets the DOS ERRORLEVEL in order to return status information
  718. to a batch file. It uses the following values of errorlevel:
  719.  
  720.   0       success: TSR is present, was disabled, or was reenabled.
  721.   1       TSR is present, but no action was required to enable or disable it.
  722.   2       TSR is not present in memory.
  723.   254     invalid command line.
  724.   255     severe error.
  725.  
  726. Examples of using DISABLE:
  727.  
  728.   DISABLE SK              disables SideKick
  729.   DISABLE SK /A           reenables SideKick
  730.   DISABLE SK /C           checks for the presence of SideKick
  731.   DISABLE SK /A /U        reenables SideKick when it was loaded into
  732.                           high memory
  733.   DISABLE $2F2E           disables the TSR at address 2F2E (hex)
  734.  
  735.  
  736. 5. MAPMEM, RAMFREE, and DEVICE
  737. ---------------------------------------------------------------------
  738. These three utilities provide status information about DOS memory
  739. usage. They don't make active changes to the system like RELEASE and
  740. DISABLE do.
  741.  
  742. MAPMEM.EXE displays a map of DOS memory. It shows the resident
  743. programs, how much memory they use, and what interrupt vectors each
  744. one controls. MAPMEM also shows information about expanded and
  745. extended memory when available.
  746.  
  747. MAPMEM writes to the standard output -- hence, the output can be
  748. printed or stored to a file by using DOS redirection.
  749.  
  750. Here is an example of MAPMEM output:
  751.  
  752. MAPMEM 3.2, Copyright 1991 TurboPower Software
  753.  
  754. Psp  Cnt   Size Name       Command Line        Hooked Vectors
  755. ---- --- ------ ---------- ------------------- ----------------------
  756.       2  74,704 DOS
  757. 1240  2   3,296 4DOS                           2E
  758.       1      80 ---free---
  759. 1316  1     464 MODE
  760. 133B  2   9,216 DESKPOP    /k /x /1            05 08 09 13 16 25 26 28
  761. 157F  2   3,296 TPE                            1B
  762. 164F  3   3,328 4dos       /e /x /u            22 23 24 2F
  763. 1722  2 560,736 ---free---
  764.         655,360 ---total--
  765.  
  766. EMS Memory
  767. 0000     16,384 n/a
  768.         770,048 ---free---
  769.       1,048,576 ---total--
  770.  
  771. XMS Memory
  772. 0001    409,600 n/a
  773. 0002    266,240 n/a
  774. 0003     73,728 n/a
  775. 0004    568,320 n/a
  776. 0005     22,528 n/a
  777.          35,840 ---free---
  778.       1,376,256 ---total--
  779.  
  780. "Psp" stands for Program Segment Prefix. This is the physical address,
  781. specified in hexadecimal, where the program was loaded. If you're
  782. running DOS 2.x, you'll need to use an address from this column to
  783. pass to DISABLE.
  784.  
  785. "Cnt" is the number of memory blocks DOS is using to manage the
  786. program. This will typically be two: one for the program itself and
  787. another for the environment that stores the program name, the DOS
  788. path, and other environment variables.
  789.  
  790. "Size" is the number of bytes of memory, specified in decimal,
  791. allocated to the program.
  792.  
  793. The "Name" column shows the name of the program that allocated the
  794. block. An "n/a" in this column means either that the program
  795. deallocated its environment to reduce memory usage or that the system
  796. is running DOS 2.x, where the owner names are simply not available.
  797. Note that, under MS-DOS 5.0, an alternate method allows MAPMEM to find
  798. the TSR name even if it deallocated its environment.
  799.  
  800. "Command line" shows the command line entered when the TSR was
  801. originally loaded. Some TSR's overwrite their command line with other
  802. code or data in order to save memory space. MAPMEM can usually detect
  803. this behavior and will display "n/a" in the command line column when
  804. it does.
  805.  
  806. The last column will be titled as either "Chained vectors" or
  807. "Hooked vectors". When WATCH is loaded, "Chained" will appear;
  808. otherwise, "Hooked" will. The numbers in this column indicate what
  809. interrupt vectors the TSR has grabbed. Without WATCH, MAPMEM must use
  810. a heuristic technique to identify the owner of each vector; don't be
  811. surprised if you see some ridiculous looking vector numbers. With
  812. WATCH, MAPMEM should report an accurate list for each TSR, and should
  813. show the complete chain of control for each interrupt.
  814.  
  815. MAPMEM indicates disabled TSR's by displaying the word "disabled" in
  816. the interrupt vector column of the report.
  817.  
  818. MAPMEM displays free memory blocks with the notation "---free---", and
  819. the total amount of memory in a particular region with the notation
  820. "---total--".
  821.  
  822. On systems running a compatible memory manager, MAPMEM will also
  823. contain a section reporting memory used in the region between 640K and
  824. 1 megabyte. This section is interpreted just like the one for lower
  825. memory. Because of the lack of complete standards for managing high
  826. memory, the names and attributes of programs in high memory may
  827. sometimes appear garbled: unfortunately there is little we can do
  828. about this without building features specific to particular memory
  829. managers into the TSR Utilities.
  830.  
  831. The expanded memory report shows each allocated block of expanded
  832. memory, as well as the free and total EMS space. If a program has
  833. assigned a name to an EMS memory block, that name will appear adjacent
  834. to the block size.
  835.  
  836. Similarly, when an XMS (extended) memory driver such as HIMEM.SYS is
  837. loaded, MAPMEM reports the blocks of allocated extended memory. A name
  838. is never available for XMS memory.
  839.  
  840. If extended memory is available and no HIMEM driver is loaded, MAPMEM
  841. will report the free and total amount of raw extended memory. These
  842. numbers can be misleading because some applications allocate extended
  843. memory by making it appear that the memory is no longer installed on
  844. the system.
  845.  
  846. MAPMEM offers the following command line options:
  847.  
  848.      /C name  check whether TSR "name" is loaded.
  849.      /E       report expanded (EMS) memory.
  850.      /F       report free areas only.
  851.      /H       do not use WATCH information for vectors.
  852.      /L       do not report low memory.
  853.      /Q       write no screen output with /C option.
  854.      /S       show summary of all memory areas.
  855.      /U       report upper memory blocks if available.
  856.      /V       verbose report.
  857.      /X       report extended (XMS) memory.
  858.      /?       write this help screen.
  859.  
  860. You can also put the string MAPMEM=options in the DOS environment. For
  861. example, if you type
  862.  
  863.     SET MAPMEM=/U/E
  864.  
  865. at the DOS command line, MAPMEM will use the /U and /E options as the
  866. defaults thereafter.
  867.  
  868. When /C is specified, MAPMEM does not produce its normal report.
  869. Instead, it simply checks to see whether the named TSR is currently in
  870. memory. MAPMEM then writes an appropriate screen message, and also
  871. sets the DOS ERRORLEVEL so that a batch file can detect the results.
  872. MAPMEM returns errorlevel 2 if the TSR isn't loaded, 1 if there was a
  873. syntax error, and 0 if the TSR is in memory. Note that this option
  874. does *not* require WATCH to be loaded. MAPMEM does not check high
  875. memory unless the /U option is also specified. It does not check low
  876. memory if the /L option is specified.
  877.  
  878. /E causes MAPMEM to generate its expanded memory report.
  879.  
  880. /F causes MAPMEM to report just the free areas in normal, high,
  881. expanded, and extended memory.
  882.  
  883. /H causes MAPMEM to report "hooked" vectors, even if WATCH is loaded.
  884.  
  885. /L causes MAPMEM to omit reporting low memory (memory below 640K) and
  886. also prevents it from searching low memory when the /C option is used.
  887. Specifying /L also automatically sets the same flag controlled by /U.
  888. /L has no effect when /F or /S is specified.
  889.  
  890. /Q prevents MAPMEM from writing any screen output. This option is only
  891. meaningful in combination with the /C option.
  892.  
  893. /S generates a "summary" report. The report shows just the size, name,
  894. and command line of each program in conventional memory, including any
  895. free blocks. It also shows the free and total memory for EMS and XMS.
  896.  
  897. /U causes MAPMEM to write information about high memory (upper memory
  898. blocks, those above 640K).
  899.  
  900. /V generates a verbose report instead of the standard report about
  901. normal and high memory. In this case, MAPMEM shows each individual
  902. memory block rather than just one for each program. It also adds two
  903. new columns of information. "Mcb" stands for Memory Control Block.
  904. This is a physical address, expressed in hexadecimal, of the DOS data
  905. structure used for managing each block of memory. The MCB address is
  906. typically one less than the address of the program. "Files" reports
  907. the number of files kept open by the TSR. In most cases this will be
  908. zero, in which case the corresponding column of the report is left
  909. blank. When it is non-zero, the maximum number of files opened by the
  910. rest of the programs (including the foreground application) is reduced
  911. accordingly.
  912.  
  913. When /V is active, MAPMEM also reports the memory allocation of each
  914. DOS device driver under DOS 5. It also shows details of memory
  915. associated with the interrupt vector table, the BIOS data area, and
  916. various DOS data areas.
  917.  
  918. RAMFREE.COM is a tiny program with a single purpose: to tell you how
  919. many bytes of memory are free for the next application. The number it
  920. reports is the same as that reported by (some versions of) the DOS
  921. CHKDSK utility. RAMFREE's advantage is that you don't need to wait for
  922. your hard disk to be analyzed before you find out how much memory is
  923. free.
  924.  
  925. DEVICE.EXE reports on device drivers installed by the CONFIG.SYS file.
  926. It shows the memory used by DOS itself, any additional drivers
  927. installed in CONFIG.SYS, and the space used for DOS file handles and
  928. buffers. Here is a simple example of DEVICE output:
  929.  
  930.  Address     Bytes   Name           Hooked vectors
  931. ---------   ------   -------------- --------------
  932. 0070:0BB3        -   CON
  933. 0070:0C68        -   AUX
  934. 0070:0C7A        -   COM1
  935. 0070:0D17        -   PRN
  936. 0070:0D29        -   LPT1
  937. 0070:0E15        -   CLOCK$
  938. 0070:0EE5        -   3 Block Units
  939. 0070:2071        -   LPT2
  940. 0070:2083        -   LPT3
  941. 0070:2095        -   COM2
  942. 0000:2C58    37712   NUL            08 0A 0C 0D 0E 13 25 26 29 31 70 72
  943.                                     73 74 75 76 77
  944. 09A5:0000     3488   0 Block Units
  945. 0A7F:0000       18   EMMXXXX0
  946. 0A7F:0012       46   386MAX$$       20
  947. 0A83:0000      768   1 Block Unit   19
  948. 0AB3:0000      768   1 Block Unit
  949. 0AE3:0000    18256   DOS buffers
  950.  
  951. The devices up to and including NUL are all part of DOS. DEVICE lumps
  952. their memory usage into a single value next to the NUL device. The
  953. memory usage associated with NUL does not include the interrupt vector
  954. table, the BIOS data area, or the low-memory DOS data area. If you
  955. wish to add this memory to the total, just take the hexadecimal
  956. segment of the first driver you see (in this case CON) and multiply it
  957. by 16 decimal. When the segment is 0070 as shown, that adds 1792 bytes
  958. to the total space for DOS.
  959.  
  960. DEVICE also lumps all of the drivers up to NUL into a single block
  961. when it comes to reporting hooked interrupt vectors. Because WATCH
  962. can't be installed prior to these device drivers, DEVICE must use an
  963. empirical technique to detect which vectors each driver controls.
  964. Therefore, some meaningless vectors may appear in the list. Any
  965. vectors that are grabbed by another program after the driver is loaded
  966. will not appear.
  967.  
  968. "Block units" typically refer to disk drives. Any drivers that appear
  969. after the NUL device are in the order that you've entered them in
  970. CONFIG.SYS. Drivers loaded for non-standard hard disks, like
  971. SpeedStor, sometimes make odd entries in the DEVICE report, as shown
  972. with "0 Block Units" above. RAM disks appear more logically: each of
  973. the "1 Block Unit" entries above is a VDISK with the data stored in
  974. extended memory.
  975.  
  976. Devices like 386MAX may also cause odd-looking entries: 386MAX puts
  977. most of its code in extended memory, and leaves just a bit behind in
  978. normal memory.
  979.  
  980. DEVICE offers the following command line options:
  981.  
  982.      /R     raw report.
  983.      /?     write a help screen.
  984.  
  985. You can also put the string DEVICE=options in the DOS environment. For
  986. example, if you type
  987.  
  988.     SET DEVICE=/R
  989.  
  990. at the DOS command line, DEVICE will use the /R option as the default
  991. thereafter.
  992.  
  993. The raw report shows more information about the device drivers, but in
  994. a less convenient format. Here's an example, taken on the same system
  995. as the previous report.
  996.  
  997.  Starting      Next             Strategy   Interrupt   Device
  998.  Address     Hdr Addr   Attr   Entry Pnt   Entry Pnt   Name
  999. ---------   ---------   ----   ---------   ---------   --------
  1000. 0000:2C58   0AB3:0000   8004   0000:14C6   0000:14CC   NUL
  1001. 0AB3:0000   0A83:0000   0800   0000:00A9   0000:00D4   1 Block Unit
  1002. 0A83:0000   0A7F:0012   0800   0000:00A9   0000:00D4   1 Block Unit
  1003. 0A7F:0012   0A7F:0000   C000   0000:0036   0000:003B   386MAX$$
  1004. 0A7F:0000   09A5:0000   8000   0000:0036   0000:003B   EMMXXXX0
  1005. 09A5:0000   0070:0BB3   2000   0000:0012   0000:001D   0 Block Units
  1006. 0070:0BB3   0070:0C68   8013   0000:00C6   0000:00D1   CON
  1007. 0070:0C68   0070:0D17   8000   0000:00C6   0000:00D7   AUX
  1008. 0070:0D17   0070:0E15   A040   0000:00C6   0000:00E6   PRN
  1009. 0070:0E15   0070:0EE5   8008   0000:00C6   0000:010C   CLOCK$
  1010. 0070:0EE5   0070:0C7A   0840   0000:00C6   0000:0112   3 Block Units
  1011. 0070:0C7A   0070:0D29   8000   0000:00C6   0000:00D7   COM1
  1012. 0070:0D29   0070:2071   A040   0000:00C6   0000:00EC   LPT1
  1013. 0070:2071   0070:2083   A040   0000:00C6   0000:00F4   LPT2
  1014. 0070:2083   0070:2095   A040   0000:00C6   0000:00FC   LPT3
  1015. 0070:2095   0070:FFFF   8000   0000:00C6   0000:00DD   COM2
  1016.  
  1017. In this report, the drivers are listed in DOS priority order rather
  1018. than the order in which they are loaded in memory. Additional columns
  1019. describe how DOS treats each driver. Ray Duncan's book "Advanced
  1020. MS-DOS" is a good place to learn more about these details.
  1021.  
  1022. The DEVICE program assumes that all device drivers are loaded in the
  1023. CONFIG.SYS file. That is not the case with the NetWare shell, which
  1024. patches itself into the device driver chain. DEVICE will write a
  1025. warning message and terminate before reporting the first patched-in
  1026. driver. The raw device report will still show all of the devices even
  1027. in this case.
  1028.  
  1029.  
  1030. 6. EATMEM
  1031. ---------------------------------------------------------------------
  1032. EATMEM is a small program that is useful only to software developers.
  1033. It is a TSR that consumes a specified amount of memory. Developers can
  1034. use it to simulate a system with less memory, or to create a buffer
  1035. zone between an application and programs preceding it.
  1036.  
  1037. The memory used by EATMEM can be freed only by using MARK and RELEASE.
  1038.  
  1039. Call EATMEM with a single command line parameter, specifying the
  1040. (decimal) number of KILOBYTES to eat up:
  1041.  
  1042.   EATMEM KiloBytesToEat
  1043.  
  1044. For example, EATMEM 10 consumes 10K bytes of memory.
  1045.  
  1046. EATMEM will allow you to eat up all available memory, leading to a
  1047. system crash when COMMAND.COM cannot be reloaded. Be sure to calculate
  1048. how much memory to use before calling EATMEM.
  1049.  
  1050.  
  1051. 7. Known Limitations
  1052. ---------------------------------------------------------------------
  1053. RELEASE and RELNET are capable of removing many, but not all, TSR's
  1054. from memory. If you find that RELEASE doesn't successfully remove a
  1055. TSR, try RELNET instead. Even with RELNET, however, some TSR's cannot
  1056. be released without specific internal knowledge of the TSR. Since we
  1057. don't have (or care about) all such TSR's, RELEASE and RELNET may not
  1058. be compatible with them. If you find that RELNET won't release a TSR,
  1059. there is little we can do to help you.
  1060.  
  1061. The most common examples of TSR's that can't be released are those
  1062. that cooperate with other TSR's in memory. Examples include
  1063. Microsoft's MOUSE driver and its associated MENU program; and the
  1064. program CED with its "user-installed commands" such as KEYIN, HS, RAW,
  1065. and others. These programs can be released, but only if all the
  1066. cooperating partners are released at the same time. CED is
  1067. well-behaved in that it provides a built-in command (KILL) to release
  1068. its partners. MOUSE is not so flexible, though.
  1069.  
  1070. Another problem TSR (and one that we hear about regularly) is the
  1071. Token Ring IPX driver for Novell NetWare. For some reason, IBM
  1072. designed this IPX driver in two pieces: one part that is loaded as a
  1073. device driver in CONFIG.SYS and another that is loaded as a TSR in
  1074. AUTOEXEC.BAT. RELNET does not release device drivers in general, and
  1075. it cannot release the TSR portion of the Token Ring driver without
  1076. also releasing the device driver portion.
  1077.  
  1078. You should almost never use RELEASE or RELNET to release disk caching
  1079. programs. If you do so, part of the information that should be stored
  1080. on disk will never be written there, and you may end up with a
  1081. corrupted disk as a result. If you know that the disk cache uses a
  1082. "write-through" algorithm (which guarantees that all writes
  1083. immediately go to disk), or if the disk cache has a "flush the cache"
  1084. command, then it may be safe to release the cache.
  1085.  
  1086. You cannot release the FASTOPEN and APPEND TSR's provided with DOS 3.3
  1087. and later. These TSR's patch internal DOS data areas that cannot be
  1088. reliably located even by MARKNET and RELNET.
  1089.  
  1090. You cannot use DISABLE to deactivate SideKick Plus, whose swapping
  1091. technique is incompatible with DISABLE.
  1092.  
  1093. For reasons we haven't been able to determine, when using the
  1094. combination of PC-DOS 4.00 and 386MAX 6.00 it isn't possible to reload
  1095. the NetWare NETX shell high after unloading it once using RELNET /U.
  1096. If you have this problem, we recommend that you toss your DOS 4.00 and
  1097. upgrade to a later version of MS-DOS.
  1098.  
  1099. It is not possible at this time to unload the IPXODI or VLM NetWare
  1100. drivers using RELNET. These drivers have their own Unload
  1101. command line options, and we recommend that you use them instead of
  1102. RELNET.
  1103.  
  1104.  
  1105. 8. Version History
  1106. ---------------------------------------------------------------------
  1107. If you're converting to this version from version 2.5 or earlier, be
  1108. sure to delete RELEASE.COM, DISABLE.COM, and MAPMEM.COM from your
  1109. directories. The new versions of these programs are EXE files instead
  1110. of COM files.
  1111.  
  1112. Always be sure that just one version of the TSR Utilities is
  1113. accessible on your disk. Many of the utilities cooperate with one
  1114. another and require matched versions to work correctly.
  1115.  
  1116. See the source code for the programs for more detailed information
  1117. about changes.
  1118.  
  1119. Version 3.5  10/18/93
  1120.   All
  1121.     - support MS-DOS 6.0 where required
  1122.     - use an improved algorithm to find the first high memory block
  1123.   DEVICE
  1124.     - display MSCDEX CD-ROM drive letters
  1125.   RELEASE
  1126.     - fix problem that occurs when a MARK is loaded high using QEMM 7.0
  1127.     - solve problem with RELEASE /U for a MARK loaded high with 386MAX
  1128.     - fix problem when DOS-UP (LOADHI COMMAND.COM) is used with QEMM 7.01
  1129.     - properly release EMS blocks that have a mapping context
  1130.   RELNET
  1131.     - fix problem that occurs when a MARK is loaded high using QEMM 7.0
  1132.     - solve problem with RELEASE /U for a MARK loaded high with 386MAX
  1133.     - fix problem when DOS-UP (LOADHI COMMAND.COM) is used with QEMM 7.01
  1134.     - add special support when unloading MSCDEX to recover used drive
  1135.       letters
  1136.     - properly release EMS blocks that have a mapping context
  1137.     - with MARKNET, restore the BIOS COM port addresses at 40h:0h
  1138.  
  1139. Version 3.4  2/14/92
  1140.   All
  1141.     - correct problem where embedded '-' was interpreted as start of
  1142.       new command line option
  1143.   DISABLE
  1144.     - add /L option to turn off low memory checking
  1145.   MAPMEM
  1146.     - fix bug in space reported for device memory blocks
  1147.     - add /L option to turn off low memory reporting and checking
  1148.     - change /C option to check high memory only if /U specified
  1149.     - report European characters in command lines of mcbs
  1150.   MARKNET
  1151.     - increase initial heap allocation to allow bigger FILES=
  1152.       (was previously limited to about FILES=130)
  1153.     - store HMA (high memory area) status
  1154.   RELEASE
  1155.     - fix hang that occurs when QEMM LOADHI didn't have space to load
  1156.       a mark high
  1157.   RELNET
  1158.     - release HMA when appropriate
  1159.     - fix hang that occurs when QEMM LOADHI didn't have space to load
  1160.       a mark high
  1161.  
  1162. Version 3.3  1/8/92
  1163.   All
  1164.     - don't require spaces to separate command line switches. For
  1165.       example, /U/V is now a valid command line to pass to MAPMEM.
  1166.     - search environment for a string matching program name to
  1167.       set default command line switches. For example, SET MAPMEM=/U/V
  1168.       causes MAPMEM to use /U/V as default command line switches.
  1169.   DISABLE
  1170.     - find TSRs by name using same technique as MAPMEM
  1171.     - add /H option to use high memory if available
  1172.   FMARK
  1173.     - detect full disk while writing mark file
  1174.     - erase partial mark file if any error occurs during execution
  1175.   MAPMEM
  1176.     - /C getname wasn't finding TSRs in high memory
  1177.   RELEASE
  1178.     - add /H option to use high memory if available
  1179.   RELNET
  1180.     - add /H option to use high memory if available
  1181.   WATCH
  1182.     - avoid overwriting the startup code with long initial mcb lists
  1183.  
  1184. Version 3.2  11/22/91
  1185.   All
  1186.     - the approach to identifying high memory blocks was generalized
  1187.       to allow the utilities to work with more memory managers
  1188.   MAPMEM
  1189.     - handle some DRDOS 6.0 segment numbering conventions
  1190.     - fix cosmetic indentation problem in raw extended memory summary
  1191.   RELEASE
  1192.     - reverse order in which memory blocks are released to work
  1193.       correctly with the 386MAX high memory manager
  1194.     - merge free blocks in high memory when possible (QEMM doesn't do
  1195.       this automatically)
  1196.     - don't restore parent segment if it's no longer valid (applies
  1197.       to QEMM LOADHI)
  1198.   RELNET
  1199.     - a change made in 3.1 caused RELNET to crash under DOS 3.3
  1200.     - reverse order in which memory blocks are released to work
  1201.       correctly with the 386MAX high memory manager
  1202.     - merge free blocks in high memory when possible (QEMM doesn't do
  1203.       this automatically)
  1204.     - don't restore parent segment if it's no longer valid (applies
  1205.       to QEMM LOADHI)
  1206.   WATCH
  1207.     - deal with odd vector addresses as trapped by DOS 5 MODE command
  1208.  
  1209. Version 3.1  11/4/91
  1210.   Documentation
  1211.     - clarified compatibility issues with various versions of 386MAX
  1212.       and QEMM386
  1213.   MAPMEM
  1214.     - EMS report wasn't showing last EMS block
  1215.     - there was a name reporting problem with TSR's that shrink their
  1216.       environment block to zero size but don't deallocate it (found
  1217.       with FluShot+)
  1218.     - was leaving interrupts 0, 3F, and others pointing to itself
  1219.       after halting
  1220.     - wouldn't show command line and hooked vectors for TSR's that
  1221.       overwrote the low portion of the PSP with data
  1222.     - wouldn't find a program (using /C) whose name was stored in
  1223.       lowercase in the environment (noticed with Windows 3.0).
  1224.   RELNET
  1225.     - needed to restore less of the DOS variables table. Restoring
  1226.       something in the previously restored region sometimes disabled
  1227.       high memory access after the release
  1228.     - added /I option to prevent shutting down IPX events and sockets
  1229.   RAMFREE
  1230.     - now supports >640K free RAM
  1231.     - now adds RAMFREE's environment block to free memory reported
  1232.   WATCH
  1233.     - lost control of int 21 when FluShot+ grabbed it
  1234.     - didn't save vector change when a program grabbed int 27
  1235.     - didn't update stubs when a program grabbing int 21 or 27 was
  1236.       released
  1237.     - ended up rewriting WATCH again to solve these compatibility
  1238.       problems. The memory consumed by WATCH shrank by 1700 bytes as a
  1239.       result!
  1240.  
  1241. Version 3.0 10/12/91
  1242.   Numerous changes to provide compatibility with MS-DOS 5.0 and
  1243.   programs loaded into high memory.
  1244.  
  1245. Version 2.9  5/4/89
  1246.   MAPMEM
  1247.     - fix problem when EMS is available but none is allocated
  1248.   DISABLE
  1249.     - fix problem when TSR to disable is last one loaded
  1250.     - disallow disable when patches would overlap (SK+)
  1251.     - add /O option to allow disable even for overlap (Periscope)
  1252.   RELEASE/RELNET
  1253.     - don't treat file marks as protected marks
  1254.  
  1255. Version 2.8  3/10/89
  1256.   add MARKNET/RELNET
  1257.   add DEVICE
  1258.   add extended memory reporting to MAPMEM
  1259.   add TSR detection capability to DISABLE
  1260.   treat file and net marks as protected in RELEASE
  1261.   add key stuffing routine to RELEASE
  1262.   remove 8259 revector routine from RELEASE (available in RELNET)
  1263.  
  1264. Version 2.7  3/4/89
  1265.   used for private testing of MARKNET/RELNET
  1266.  
  1267. Version 2.6  1/15/89
  1268.   fix problem in MARK/RELEASE when command processor is EXE file
  1269.   convert source to Turbo Pascal 5.0
  1270.  
  1271. Version 2.5  6/2/87
  1272.   version checks to avoid mixing different MARK/RELEASE
  1273. :
  1274. many intervening versions
  1275. :
  1276. Version 1.0  1/2/86
  1277.   initial version
  1278.  
  1279. For information about other versions, see the source files.
  1280.  
  1281.  
  1282. 9. Copyright and License Information
  1283. ---------------------------------------------------------------------
  1284. The TSR Utilities are Copyright (c) 1986,1993 by Kim Kokkonen. All
  1285. Rights Reserved.
  1286.  
  1287. Although these programs are copyrighted, you may distribute them
  1288. freely as long as you do not sell them or include them with other
  1289. software that you sell. The TSR Utilities may be sold by user's groups
  1290. and shareware distributors for a fee not to exceed $10. Otherwise, if
  1291. you wish to sell the TSR Utilities, alone or as part of another
  1292. software package, please contact us for a license agreement.
  1293.  
  1294. These programs are not shareware: we're not asking for a donation.
  1295. However, if you request that we send you a new version, we'll ask for
  1296. $20 to cover our time and costs. The disk you receive will include the
  1297. latest version of the TSR Utilities, including the complete source
  1298. code.
  1299.  
  1300. We upload new versions of the TSR Utilities to LIB 6 of the PCVENB
  1301. forum on CompuServe. The executable programs are stored in a file
  1302. called TSRCOM.ZIP, and the source code is stored in a file called
  1303. TSRSRC.ZIP. From CompuServe, the programs fan out to public bulletin
  1304. boards around the world.
  1305.  
  1306. TurboPower Software also maintains a small bulletin board system just
  1307. for the purpose of downloading our software. The BBS number is
  1308. 719-260-9726. The board is often down during TurboPower business
  1309. hours, but is otherwise up 7 days a week. You'll find TSRCOM.EXE and
  1310. TSRSRC.EXE in file area 2 (TurboPower Software Files). These are
  1311. self-extracting archives. Our BBS is a Wildcat! system; just follow
  1312. the prompts to log in the first time. Due to the transient nature of
  1313. bulletin boards, we cannot recommend other BBS's you should call to
  1314. download the latest version.
  1315.  
  1316. The TSR Utilities were written by Kim Kokkonen of TurboPower Software,
  1317. with thanks to Neil Rubenking for the original idea behind MARK and
  1318. RELEASE. Special thanks also to Richard Wilson and Barry Simon at
  1319. Cal Tech for the idea that lead to FMARK, and for much useful
  1320. correspondence about the TSR Utilities. The TSR Utilities are written
  1321. in Turbo Pascal and assembly language.
  1322.  
  1323. You can reach Kim Kokkonen at:
  1324.  
  1325.      TurboPower Software
  1326.      P.O. Box 49009
  1327.      Colorado Springs, CO 80949-9009
  1328.  
  1329.      719-260-6641 (voice, Monday-Friday 9AM-5PM)
  1330.      719-260-7151 (fax)
  1331.      Compuserve: 76004,2611
  1332.